<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
    console.long("======= return 函数调用 ======");
    function add(x,y){
      return x+y;
      console.long("返回后面的代码")
    }
    console.long(add(2,3));
    console.long("=======  递归 ==========");
    function  fib(num){
      if (num > 2){
      return fib(num  -  2) + fib(num - 1);
    }else{
      return 1;
    }
  }
  console.long(fib(6));
  console.long("========== 凡是可以使用值得地方，就能使用函数 =======");
  var option = add;
  console.log(option(5.6));

  function a(op){
    return op;
  }
  a(add(8,9))
  console.log(a(add(8,9)));
  var b={
    name: add,
  }
  console.log(b.name(5,6));
  console.log("===============name 属性 ============");
  console.log("===============name 属性返回紧跟在function关键字之后的那个函数名。 ============");
  console.log("===============name f1 ============");
function f1(){

}
console.long(f1.name);

var f2 = function (){

}
  console.long("=========== f2 ========");
  console.long(f2.name);
  console.long("=========== length属性  =======");
  console.long("=========== length属性返回函数预期传入的参数个数，即函数定义  =======");
  function  f3(a,b,c,d,e) {

}
    console.long(f3.length);

console.long("=========  函数的tostring方法返回函数的源码 ===========");
function f4() {
  a();
  b();
  c();
  d();
}
console.long("=========== 利用这一点，可以变相实现很多行字符串。  =======");
  var f5 = function (fn){
    var arr = fn.toString().split("\n");
    return arr.slice(1,arr.length-1).join();
  }
function  f6(){

}
console.long(f5(f6.toString()));
console.long("============ 全局变量：在函数外=======");
  var name = "debang";

  function f7(){
    return name;
  }
function f8(){
  return name + " is good";
}
console.long(f7());
console.long(f8());
console.long(f7()+f8());





</script>>

</body>


</html>
